package com.hanser.hancoder.ai.model.message;

import dev.langchain4j.service.tool.ToolExecution;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

/**
 * 工具执行结果消息类
 * <p>
 * 该类用于封装工具执行后的结果信息，包括工具的ID、名称、参数和执行结果。
 * 继承自{@link StreamMessage}，用于在流式消息中传递工具执行结果。
 * </p>
 */
@Data
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
public class ToolExecutedMessage extends StreamMessage {

    /**
     * 工具执行的唯一标识符
     */
    private String id;

    /**
     * 工具名称
     */
    private String name;

    /**
     * 工具执行时传入的参数
     */
    private String arguments;

    /**
     * 工具执行的结果
     */
    private String result;

    /**
     * 构造函数，根据{@link ToolExecution}对象初始化工具执行结果消息
     *
     * @param toolExecution 工具执行对象，包含请求信息和执行结果
     */
    public ToolExecutedMessage(ToolExecution toolExecution) {
        super(StreamMessageTypeEnum.TOOL_EXECUTED.getValue());
        this.id = toolExecution.request().id();
        this.name = toolExecution.request().name();
        this.arguments = toolExecution.request().arguments();
        this.result = toolExecution.result();
    }
}
